/**
 * Werwolftool-Spielleiterfunktionen
 * @author JANNiS <jannis@huffle-home.de>
 */

/**
 * Klasse für die Auswertungsbox mit Funktionen und grafischen Effekten
 */
var DarstellungAuswertungsbox = new Class({
	/**
	 * Der grafische Effekt um die Box rein- und rauszufahren
	 */
	slide: null,
	
	/**
	 * Konstruktor, bereitet die Auswertungsbox vor
	 * Macht die Box ein-/ausfahrbar
	 */
	initialize: function() {
		// Box vertikal ein- und ausfahrbar machen
		this.slide = new Fx.Tween("auswertungsboxcontainer", {property: "height"});
		// Box ausblenden
		this.hide();
			
		// Beim Klick auf schliessen ...
		$("auswertungschliessen").addEvent("click", function(e) {
			// Auswertungsbox rausfahren
			darstellung.auswertungsbox.slideOut();
		});
		
		// Wenn das Formular abgesendet wurde ...
		$("auswertungsboxformular").addEvent("submit", function(e) {
			// Absenden abbrechen
			e.stop();
		});
	},
	
	/**
	 * Erstellt eine neue Auswertung, gibt sie in der Box aus und zeigt die Box an
	 */
	zeigen: function() {
		// Auswertung aktualisieren
		spiel.auswertung.aktualisieren();
		// Neuen Auswertungstext darstellen
		this.aktualisiereText();
		// Neue Stimmenliste darstellen
		this.aktualisiereStimmen();
		// Box reinfahren
		this.slideIn();
	},
	
	/**
	 * Aktualisiert den Text bei der Auswertung
	 * Zeigt an, wer die meisten Stimmen hat und wie viele Spieler bereits gestimmt haben
	 */
	aktualisiereText: function() {
		// Variable für Text erstellen
		var text;
		
		// Falls noch keine Stimme abgegeben wurde ...
		if(spiel.auswertung.opferliste.length == 0) {
			// Standardtext setzen
			text = "Es wurde bisher noch keine Stimme abgegeben.";
			// Stimmen-Container unsichtbar machen
			$("auswertungsstimmencontainer").setStyle("display", "none");
		}
		// ... sonst ...
		else {
			
			// Stimmen-Container sichtbar machen
			$("auswertungsstimmencontainer").setStyle("display", "block");
			
			// Falls ein Spieler alleine die meisten Stimmen hat ...
			if(spiel.auswertung.meisteStimmen.length == 1) {
				
				// Spieler mit den meisten Stimmen merken
				var spieler = spiel.auswertung.meisteStimmen[0];
				// Namen des Spielers merken
				var name = spieler.get("name");
				// Anzahl Stimmen des Spielers merken
				var anzahl = spieler.get("stimmen").length;
				
				// Text setzen
				text = name + " hat mit " + anzahl + " die meisten Stimmen. ";
			}
			// ... sonst ...
			else {
				
				// Spieler mit den meisten Stimmen merken
				var spielerArray = spiel.auswertung.meisteStimmen;
				// Spieler-Anzahl mit den meisten Stimmen merken
				var spielerAnzahl = spielerArray.length;
				
				// für jeden Spieler mit den meisten Stimmen ...
				spielerArray.each(function(spieler, nummer) {
					
					// Namen des Spielers merken
					var name = spieler.get("name");
					
					// Falls der Spieler der erste ist ...
					if(nummer == 0) {
						// Namen hinschreiben
						text = name;
					// ... sonst falls der Spieler in der Mitte ist ...
					} else if(nummer < spielerAnzahl-1) {
						// Namen mit Komma abtrennen
						text += ", " + name;
					}
					// ... sonst (falls der Spieler der letzte ist) ...
					else {
						// Namen mit "und" abtrennen
						text += " und " + name;
					}
				});
					
				// Stimmenanzahl merken (vom ersten Spieler, da alle gleichviel haben)
				var anzahl = spielerArray[0].get("stimmen").length;
				// Text fortführen
				text += " haben mit " + anzahl + " am meisten Stimmen. ";
			}
			
			// Spieleranzahl merken
			var gesamt = spiel.spieler.length;
			// Anzahl der Spieler, die nicht gestimmt haben, merken
			var nichtGestimmt = spiel.auswertung.nichtGestimmt.length;
			// Anzahl der Spieler, die gestimmmt haben, merken
			var gestimmt = gesamt - nichtGestimmt;
			
			// Falls alle Spieler die Stimme abgegeben haben ...
			if(gestimmt == gesamt) {
				// Text beenden (alle)
				text += "Alle Spieler haben ihre Stimme abgegeben.";
			}
			// ... sonst ...
			else {
				// Text beenden (Anzahl)
				text += gestimmt + " von " + gesamt + " Spielern haben ihre Stimme abgegeben.";
			}
		}
		
		// Text darstellen
		$("auswertungstext").set("text", text);
	},
	
	/**
	 * Aktualisiert die Textbox bei der Auswertung
	 * Zeigt an, wer auf wen und wer nicht gestimmt hat
	 */
	aktualisiereStimmen: function() {
		// Variable für den Text erstellen
		var text = "";
		
		// Für jeden Spieler, auf den gestimmt wurde ...
		spiel.auswertung.opferliste.each(function(opfer) {
			// Namen zur Liste hinzufügen
			text += "Auf " + opfer.get("name") + ": ";
			
			// Für jeden Spieler, der auf diesen Spieler gestimmt hat ...
			opfer.get("stimmen").each(function(name, nummer) {
				
				// Falls der Spieler der erste in der Liste ist ...
				if(nummer == 0) {
					// Namen ohne Trennung hinzufügen
					text += name;
				}
				// ... sonst ...
				else {
					// Namen mit Komma abtrennen
					text += ", " + name;
				}
			});
			
			// Stimmenanzahl auf diesen Spieler merken
			var anzahl = opfer.get("stimmen").length;
			// Falls mehr als ein Spieler auf diesen Spieler gestimmt hat ...
			if(anzahl > 1) {
				// Anzahl der Spieler, die auf diesen Spieler gestimmt haben, hinzufügen
				text += " (" + anzahl + ")";
			}
			
			// Zeilenumbruch hinzufügen
			text += "\n";
		});
		
		// Falls es Spieler gibt, die nicht abgestimmt haben ...
		if(spiel.auswertung.nichtGestimmt.length != 0) {
			// Überschrift hinzufügen
			text += "\nNicht gestimmt:\n";
			// Für jeden Spieler, der nicht gestimmt hat ...
			spiel.auswertung.nichtGestimmt.each(function(spieler) {
				// Namen und Zeilenumbruch hinzufügen
				text += spieler + "\n";
			});
		}
		
		// Text in die Liste schreiben
		$("auswertungsstimmen").set("value", text);
	},
	
	/**
	 * Fährt die Box rein-/raus (das jeweils andere des aktuellen Zustands)
	 * Aktualisiert beim reinfahren die Box
	 */
	toggle: function() {
		// Falls die Box noch nicht reingefahren ist (Höhe auf 0) ...
		if($("auswertungsboxcontainer").getStyle("height").toInt() == 0) {
			// Box reinfahren (und dabei aktualisieren)
			this.zeigen();
		}
		// ... sonst ...
		else {
			// Box rausfahren
			this.slideOut();
		}
	},
	/**
	 * Blendet die Box sofort aus
	 */
	hide: function() {
		// Container-Höhe auf 0 setzen
		this.slide.set(0);
	},
	/**
	 * Fährt die Box rein
	 */
	slideIn: function() {
		// Höhe des Inhalts merken
		var ziel = $("auswertungsbox").getStyle("height").toInt();
		// Container-Höhe auf diese Höhe fahren
		this.slide.start(ziel);
	},
	/**
	 * Fährt die Box raus
	 */
	slideOut: function() {
		// Container-Höhe bis 0 fahren
		this.slide.start(0);
	}
});